package datamodule;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import util.FData;
import util.FString;
import conexao.Connect;

public class MembrosDAO {


	private DBuserVO userVO;

	public MembrosDAO( DBuserVO userVO){
		this.userVO = userVO;
	}
	//Inserir Membros
	public int inserir(MembrosVO VObro) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmtInsert = con.prepareStatement(
				"INSERT INTO membros(bro_Cod_Membro, bro_Nome, igr_Cod_Igreja, bro_Endereco, " +
				" cid_Cod_Cidade, bro_UF, bro_CEP, bro_Fone, bro_Celular, bro_E_Mail, " +
				" bro_Sexo, bro_DT_Nasc, bro_CPF, bro_RG, bro_Desde, bro_Pai, bro_Mae, " +
				" bro_Natural, bro_UF_NASC, bro_Est_Civil, bro_Batizado, bro_Observacao, bro_Ativo) "+ 
				" VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ");
		pstmtInsert.setString(1, VObro.getBro_Cod_Membro());			
		pstmtInsert.setString(2, VObro.getBro_Nome());
		pstmtInsert.setString(3, VObro.getIgr_Cod_Igreja());
		pstmtInsert.setString(4, VObro.getBro_Endereco());
		pstmtInsert.setString(5, VObro.getCid_Cod_Cidade());
		pstmtInsert.setString(6, VObro.getBro_UF());
		pstmtInsert.setString(7, VObro.getBro_CEP());
		pstmtInsert.setString(8, VObro.getBro_Fone());
		pstmtInsert.setString(9, VObro.getBro_Celular());
		pstmtInsert.setString(10,VObro.getBro_E_Mail());
		pstmtInsert.setString(11,VObro.getBro_Sexo());	
		pstmtInsert.setString(12,VObro.getBro_DT_Nasc() == FData.ignorarD || VObro.getBro_DT_Nasc() == null? FData.dataDefaultSQL(): VObro.getBro_DT_Nasc_SQL());
		pstmtInsert.setString(13,VObro.getBro_CPF());
		pstmtInsert.setString(14,VObro.getBro_RG());
		pstmtInsert.setString(15,VObro.getBro_Desde() == FData.ignorarD || VObro.getBro_Desde() == null? FData.dataDefaultSQL(): VObro.getBro_Desde_SQL());
		pstmtInsert.setString(16,VObro.getBro_Pai());
		pstmtInsert.setString(17,VObro.getBro_Mae());
		pstmtInsert.setString(18,VObro.getBro_Natural());
		pstmtInsert.setString(19,VObro.getBro_UF_NASC());
		pstmtInsert.setString(20,VObro.getBro_Est_Civil());
		pstmtInsert.setString(21,VObro.getBro_Batizado() == FData.ignorarD || VObro.getBro_Batizado() == null? FData.dataDefaultSQL(): VObro.getBro_Batizado_SQL());
		pstmtInsert.setString(22,VObro.getBro_Observacao());
		pstmtInsert.setString(23,VObro.getBro_Ativo());
		int reg = pstmtInsert.executeUpdate();	
		con.close();
		return reg;
	}

	//Alterar Membros
	public int alterar(MembrosVO VObro) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		String virgula = "";
		StringBuffer sql = new StringBuffer(" UPDATE membros SET ");

		if (!VObro.getBro_Cod_Membro().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Cod_Membro = '"+VObro.getBro_Cod_Membro()+"' ");
			virgula = ",";
		}
		
		if (!VObro.getBro_Nome().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Nome = '"+VObro.getBro_Nome()+"' ");
			virgula = ",";
		}
		
		if (!VObro.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(virgula+" igr_Cod_Igreja = '"+VObro.getIgr_Cod_Igreja()+"' ");
			virgula = ",";
		}
				
		if (!VObro.getBro_Endereco().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Endereco = '"+VObro.getBro_Endereco()+"' ");
			virgula = ",";
		}
		if (!VObro.getCid_Cod_Cidade().equals(FString.ignorar)) {
			sql.append(virgula+" cid_Cod_Cidade = '"+VObro.getCid_Cod_Cidade()+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_UF().equals(FString.ignorar)) {
			sql.append(virgula+" bro_UF = '"+VObro.getBro_UF()+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_CEP().equals(FString.ignorar)) {
			sql.append(virgula+" bro_CEP = '"+VObro.getBro_CEP()+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_Fone().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Fone = '"+VObro.getBro_Fone()+"' ");
			virgula = ",";
		}	
		if (!VObro.getBro_Celular().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Celular = '"+VObro.getBro_Celular()+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_E_Mail().equals(FString.ignorar)) {
			sql.append(virgula+" bro_E_Mail = '"+VObro.getBro_E_Mail()+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_Sexo().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Sexo = '"+VObro.getBro_Sexo()+"' ");
			virgula = ",";
		}
		if (VObro.getBro_DT_Nasc() != FData.ignorarD) {
			sql.append(virgula+" bro_DT_Nasc = '"+(VObro.getBro_DT_Nasc() == FData.ignorarD || VObro.getBro_DT_Nasc() == null? FData.dataDefaultSQL(): VObro.getBro_DT_Nasc_SQL())+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_CPF().equals(FString.ignorar)) {
			sql.append(virgula+" bro_CPF = '"+VObro.getBro_CPF()+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_RG().equals(FString.ignorar)) {
			sql.append(virgula+" bro_RG = '"+VObro.getBro_RG()+"' ");
			virgula = ",";
		}
		if (VObro.getBro_Desde() != FData.ignorarD) {
			sql.append(virgula+" bro_Desde = '"+(VObro.getBro_Desde() == FData.ignorarD || VObro.getBro_Desde() == null? FData.dataDefaultSQL(): VObro.getBro_Desde_SQL())+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_Pai().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Pai = '"+VObro.getBro_Pai()+"' ");
			virgula = ",";
		}	
		if (!VObro.getBro_Mae().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Mae = '"+VObro.getBro_Mae()+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_Natural().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Natural = '"+VObro.getBro_Natural()+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_UF_NASC().equals(FString.ignorar)) {
			sql.append(virgula+" bro_UF_NASC = '"+VObro.getBro_UF_NASC()+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_Est_Civil().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Est_Civil = '"+VObro.getBro_Est_Civil()+"' ");
			virgula = ",";
		}
		if (VObro.getBro_Batizado()  != FData.ignorarD) {
			sql.append(virgula+" bro_Batizado = '"+(VObro.getBro_Batizado() == FData.ignorarD || VObro.getBro_Batizado() == null? FData.dataDefaultSQL(): VObro.getBro_Batizado_SQL())+"' ");
			virgula = ",";
		}
		if (!VObro.getBro_Observacao().equals(FString.ignorar)) {
			sql.append(virgula+" bro_Observacao = '"+VObro.getBro_Observacao()+"' ");
			virgula = ",";
		}
    	if (!VObro.getBro_Ativo().equals(FString.ignorar)) {
		sql.append(virgula+" bro_Ativo = '"+VObro.getBro_Ativo()+"' ");
		virgula = ",";
    	}
		
		sql.append(" WHERE bro_Cod_Membro = '"+VObro.getBro_Cod_Membro()+"' ");
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0, sql.length()));
		//System.out.println(pstmt);
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}	
	
	// Deletar Membros
	public int deletar(MembrosVO VObro) throws ClassNotFoundException, SQLException {		
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmt = con.prepareStatement(
		"DELETE FROM membros WHERE bro_Cod_Membro = ?");
		pstmt.setString(1, VObro.getBro_Cod_Membro());
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}

	//Pesquisar Membros
	public MembrosVO pesquisar(MembrosVO VObro) throws ClassNotFoundException, SQLException {				
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM membros  Where bro_Cod_Membro <> '' ");
		
		if (!VObro.getBro_Cod_Membro().equals(FString.ignorar)) {
			sql.append(" AND UPPER(bro_Cod_Membro)= '"+VObro.getBro_Cod_Membro()+"' ");			
		}		
		if (!VObro.getBro_Nome().equals(FString.ignorar)) {
			sql.append(" AND UPPER(bro_Nome) LIKE UPPER('"+VObro.getBro_Nome()+"%"+"')"); 			
		}
		if (!VObro.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(" AND UPPER(igr_Cod_Igreja) = '"+VObro.getIgr_Cod_Igreja()+"' ");			
		}
	
		//System.out.println(sql);
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {

			VObro = new MembrosVO();
			VObro.setBro_Cod_Membro( rs.getString("bro_Cod_Membro"));
			VObro.setBro_Nome      ( rs.getString("bro_Nome"));
			VObro.setIgr_Cod_Igreja( rs.getString("igr_Cod_Igreja"));
			VObro.setBro_Endereco  ( rs.getString("bro_Endereco"));
			VObro.setCid_Cod_Cidade( rs.getString("cid_Cod_Cidade"));
			VObro.setBro_UF        ( rs.getString("bro_UF"));
			VObro.setBro_CEP       ( rs.getString("bro_CEP"));
			VObro.setBro_Fone      ( rs.getString("bro_Fone"));
			VObro.setBro_Celular   ( rs.getString("bro_Celular"));
			VObro.setBro_E_Mail    ( rs.getString("bro_E_Mail"));
			VObro.setBro_Sexo      ( rs.getString("bro_Sexo"));
			VObro.setBro_DT_Nasc   ( rs.getDate  ("bro_DT_Nasc"));
			VObro.setBro_CPF       ( rs.getString("bro_CPF"));
			VObro.setBro_RG        ( rs.getString("bro_RG"));
			VObro.setBro_Desde     ( rs.getDate  ("bro_Desde"));
			VObro.setBro_Pai       ( rs.getString("bro_Pai"));
			VObro.setBro_Mae       ( rs.getString("bro_Mae"));
			VObro.setBro_Natural   ( rs.getString("bro_Natural"));
			VObro.setBro_UF_NASC   ( rs.getString("bro_UF_NASC"));
			VObro.setBro_Est_Civil ( rs.getString("bro_Est_Civil"));
			VObro.setBro_Batizado  ( rs.getDate  ("bro_Batizado"));
			VObro.setBro_Observacao( rs.getString("bro_Observacao"));
			VObro.setBro_Ativo     ( rs.getString("bro_Ativo"));

		}else {
			VObro = null;
		}
		pstmt.close();
		rs.close();
		con.close();
		return VObro;
	}

	public ArrayList<MembrosVO> geral(MembrosVO VObro) throws SQLException, ClassNotFoundException {		
		ArrayList<MembrosVO> lista = null;
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM membros Where bro_Cod_Membro <> ''  ");
		if (!VObro.getBro_Cod_Membro().equals(FString.ignorar)) {
			sql.append(" AND UPPER(bro_Cod_Membro) = ('"+VObro.getBro_Cod_Membro()+"')");
		}
		if (!VObro.getBro_Nome().equals(FString.ignorar)) {
			sql.append(" AND UPPER(bro_Nome) LIKE UPPER('"+VObro.getBro_Nome()+"%"+"')");
		}
		if (!VObro.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(" AND UPPER(igr_Cod_Igreja) LIKE UPPER('"+VObro.getIgr_Cod_Igreja()+"%"+"')");
		}
		if (!VObro.getOrdem().equals(FString.ignorar)) {
			sql.append(" ORDER BY "+VObro.getOrdem());
		}
		if (!VObro.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VObro.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			lista = new ArrayList<MembrosVO>();
			do {
				MembrosVO bro = new MembrosVO();
				bro.setBro_Cod_Membro( rs.getString("bro_Cod_Membro"));
				bro.setBro_Nome      ( rs.getString("bro_Nome"));
				bro.setIgr_Cod_Igreja( rs.getString("igr_Cod_Igreja"));
				bro.setBro_Endereco  ( rs.getString("bro_Endereco"));
				bro.setCid_Cod_Cidade( rs.getString("cid_Cod_Cidade"));
				bro.setBro_UF        ( rs.getString("bro_UF"));
				bro.setBro_CEP       ( rs.getString("bro_CEP"));
				bro.setBro_Fone      ( rs.getString("bro_Fone"));
				bro.setBro_Celular   ( rs.getString("bro_Celular"));
				bro.setBro_E_Mail    ( rs.getString("bro_E_Mail"));
				bro.setBro_Sexo      ( rs.getString("bro_Sexo"));
				bro.setBro_DT_Nasc   ( rs.getDate  ("bro_DT_Nasc"));
				bro.setBro_CPF       ( rs.getString("bro_CPF"));
				bro.setBro_RG        ( rs.getString("bro_RG"));
				bro.setBro_Desde     ( rs.getDate  ("bro_Desde"));
				bro.setBro_Pai       ( rs.getString("bro_Pai"));
				bro.setBro_Mae       ( rs.getString("bro_Mae"));
				bro.setBro_Natural   ( rs.getString("bro_Natural"));
				bro.setBro_UF_NASC   ( rs.getString("bro_UF_NASC"));
				bro.setBro_Est_Civil ( rs.getString("bro_Est_Civil"));
				bro.setBro_Batizado  ( rs.getDate  ("bro_Batizado"));
				bro.setBro_Observacao( rs.getString("bro_Observacao"));
				bro.setBro_Ativo     ( rs.getString("bro_Ativo"));

				lista.add(bro);
			}
			while (rs.next());			
		}
		pstmt.close();
		rs.close();
		con.close();
		return lista;
	}
	
	public ResultSet listagem(MembrosVO VObro, Connection con) throws SQLException, ClassNotFoundException {		

		StringBuffer sql = new StringBuffer("SELECT "+
		" membros.`bro_Cod_Membro` AS membros_bro_Cod_Membro, "+
		" membros.`bro_Nome` AS membros_bro_Nome, "+
		" membros.`Igr_Cod_Igreja` AS membros_Igr_Cod_Igreja, "+
		" membros.`bro_Endereco` AS membros_bro_Endereco, "+
		" membros.`cid_Cod_Cidade` AS membros_cid_Cod_Cidade, "+
		" membros.`bro_UF` AS membros_bro_UF, "+
		" membros.`bro_CEP` AS membros_bro_CEP, "+
		" membros.`bro_Fone` AS membros_bro_Fone, "+
		" membros.`bro_Celular` AS membros_bro_Celular, "+
		" membros.`bro_E_Mail` AS membros_bro_E_Mail, "+
		" membros.`bro_Sexo` AS membros_bro_Sexo, "+
		" membros.`bro_DT_Nasc` AS membros_bro_DT_Nasc, "+
		" membros.`bro_CPF` AS membros_bro_CPF, "+
		" membros.`bro_RG` AS membros_bro_RG, "+
		" membros.`bro_Desde` AS membros_bro_Desde, "+
		" membros.`bro_Pai` AS membros_bro_Pai, "+
		" membros.`bro_Mae` AS membros_bro_Mae, "+
		" membros.`bro_Natural` AS membros_bro_Natural, "+
		" membros.`bro_UF_NASC` AS membros_bro_UF_NASC, "+
		" membros.`bro_Est_Civil` AS membros_bro_Est_Civil, "+
		" membros.`bro_Batizado` AS membros_bro_Batizado, "+
		" membros.`bro_Observacao` AS membros_bro_Observacao, "+
		" membros.`bro_Ativo` AS membros_bro_Ativo, "+
		" igrejas.`igr_Cod_Igreja` AS igrejas_igr_Cod_Igreja, "+
		" igrejas.`igr_Descricao` AS igrejas_igr_Descricao, "+
		" cidades.`cid_Cod_Cidade` AS cidades_cid_Cod_Cidade, "+
		" cidades.`cid_Descricao` AS cidades_cid_Descricao, "+
		" cidades2.`cid_Cod_Cidade` AS cidades_cid_Cod_CidNat, "+
		" cidades2.`cid_Descricao` AS cidades_cid_DescNat "+
		" FROM  `membros` membros " +
		" LEFT OUTER JOIN `cidades` cidades ON cidades.`cid_Cod_Cidade` = membros.`cid_Cod_Cidade` "+		
		" LEFT OUTER JOIN `cidades` cidades2 ON cidades2.`cid_Cod_Cidade` = membros.`bro_Natural` "+
		" INNER JOIN `igrejas` igrejas ON membros.`Igr_Cod_Igreja` = igrejas.`igr_Cod_Igreja` "+
		" Where membros.`bro_Cod_Membro` <> '' ");
				
		if (!VObro.getBro_Cod_Membro().equals(FString.ignorar) && !VObro.getBro_Cod_Membro().isEmpty()) {
			sql.append(" AND UPPER(membros.`bro_Cod_Membro`) = '"+VObro.getBro_Cod_Membro()+"' ");			
		}		
		if (!VObro.getBro_Nome().equals(FString.ignorar) && !VObro.getBro_Nome().isEmpty()) {
			sql.append(" AND UPPER(membros.`bro_Nome`) LIKE UPPER('"+VObro.getBro_Nome()+"%"+"')"); 			
		}

		if (!VObro.getIgr_Cod_Igreja().equals(FString.ignorar) && !VObro.getIgr_Cod_Igreja().isEmpty()) {
			sql.append(" AND UPPER(membros.`igr_Cod_Igreja`) = '"+VObro.getIgr_Cod_Igreja()+"' ");
		}


		if (!VObro.getBro_UF().equals(FString.ignorar) && !VObro.getBro_UF().isEmpty()) {
			sql.append(" AND UPPER(membros.`bro_UF`) = ('"+VObro.getBro_UF()+"')");
		}

		if (!VObro.getCid_Cod_Cidade().equals(FString.ignorar) && !VObro.getCid_Cod_Cidade().isEmpty()) {
			sql.append(" AND UPPER(membros.`cid_Cod_Cidade`) = ('"+VObro.getCid_Cod_Cidade()+"')");
		}
		
		
		if (!VObro.getOrdem().equals(FString.ignorar) && !VObro.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VObro.getOrdem());
		}
		if (!VObro.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VObro.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));
		System.out.println(pstmt);
		ResultSet rs = pstmt.executeQuery();
		return rs;
	}	
	
}